package com.lance.answer.gui.answer.gk.answer;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lance.answer.gui.answer.AnswerObject;
import com.lance.answer.gui.answer.DealJsonString;
import com.lance.answer.gui.answer.Util;
import com.lance.answer.gui.answer.gk.DealInfoUtil;
import com.lance.answer.gui.answer.gk.GkCourseConfig;
import com.lance.answer.gui.answer.gk.answer.task.DoAnswerTask;
import com.lance.answer.gui.answer.gk.video.dto.WatchVideoDto;
import com.lance.answer.gui.answer.gk.video.task.WatchVideoTask;
import com.lance.answer.util.Constant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;

@Slf4j
public class DoAnswer {

    public static void main(String[] args) throws Exception {


    //    Thread.sleep(1000*60*60*3);
    //    Thread.sleep(200*60*60*1);

    ///    Thread.sleep(3*60*60*1500);
     //   Thread.sleep(3*60*60*500);

        int sync = 1;

       // String subjectName = "人力资源管理";
    //    String subjectName = "政治学原理";
      //  String subjectName = "计算机应用基础";

        List<String> subjectList = Lists.newArrayList();
    //    subjectList.add("公共政策概论");
     //   subjectList.add("幼儿园课程论");
     //   subjectList.add("政府经济学");
    //    subjectList.add("学前儿童科学教育");
    //    subjectList.add("中国法制史");


        subjectList.add("中国法制史");
        subjectList.add("建筑工程项目招投标与合同管理");
        subjectList.add("建筑测量");
        subjectList.add("建设法规");
        subjectList.add("建筑工程计量与计价");
        subjectList.add("建筑施工技术");
        subjectList.add("人力资源管理");
        subjectList.add("公共行政学");
        subjectList.add("政治学原理");
        subjectList.add("管理学基础");
        subjectList.add("建筑测量");
        subjectList.add("建筑工程质量检验");
        subjectList.add("基础会计");
        subjectList.add("公共政策概论");
        subjectList.add("当代中国政治制度");
        subjectList.add("经济法学");
        subjectList.add("行政法与行政诉讼法");
        subjectList.add("刑事诉讼法学");
        subjectList.add("★中级财务会计（一）");
        subjectList.add("成本会计");
        subjectList.add("★管理会计");
        subjectList.add("药事管理与法规");
       // subjectList.add("病理学与病理生理学"); // FIXME TODO
        subjectList.add("医学免疫学与微生物学");
        subjectList.add("人体解剖生理学");
        subjectList.add("微机系统与维护");
        subjectList.add("Dreamweaver网页设计");
        subjectList.add("网络实用技术基础");
        subjectList.add("管理心理学");
        subjectList.add("管理学基础");
        subjectList.add("人力资源管理");
      //  subjectList.add("可编程控制器应用可编程控制器应用");
     //   subjectList.add("机械制造基础");
    //    subjectList.add("机械设计基础");
        subjectList.add("电工电子技术");
        subjectList.add("学前儿童科学教育");
        subjectList.add("阅读与写作(1)");
        subjectList.add("自然科学基础");
        subjectList.add("人文社会科学基础(A)");
        subjectList.add("西方经济学（本）");
        subjectList.add("组织行为学");
        subjectList.add("公司概论");



        subjectList.add("建筑结构");
        subjectList.add("药理学（药）");
//        subjectList.add("管理学基础");
//        /**
//         * http://xinjiang.ouchn.cn/mod/forum/view.php?id=268418 创建话题
//         * http://xinjiang.ouchn.cn/mod/assign/view.php?id=268419 上传文件
//         */
//        subjectList.add("公共行政学");  //创建话题
//        /**
//         * http://xinjiang.ouchn.cn/mod/forum/view.php?id=268647 创建话题
//         */
//        subjectList.add("办公室管理");
//        subjectList.add("个人与团队管理");
//
//        /**
//         * http://xinjiang.ouchn.cn/mod/forum/view.php?id=269795 创建话题
//         */
//        subjectList.add("行政组织学");
//
//        /**
//         * 有话题
//         */
//        subjectList.add("社会调查研究与方法");
//      //  subjectList.add("监督学"); //都是上传文件
////      //  subjectList.add("西方经济学"); //TODO
////      //  subjectList.add("统计学原理"); //TODO 线下
////
        subjectList.add("毛泽东思想和中国特色社会主义理论体系概论"); //FIXME 毛泽东也有两套答题链接
        subjectList.add("形势与政策");
          subjectList.add("习近平新时代中国特色社会主义思想");
        subjectList.add("国家开放大学学习指南");
        subjectList.add("思想道德与法治");
        subjectList.add("马克思主义基本原理概论");
        subjectList.add("思想道德修养与法律基础"); // 上传文件的还要刷http://xinjiang.ouchn.cn/mod/assign/view.php?id=242355
////
//     //   subjectList.add("建筑工程项目管理"); //TODO 线下
//        subjectList.add("建筑测量"); //
        subjectList.add("中国近现代史纲要"); // 有大作业
         subjectList.add("计算机应用基础"); //

        LinkedBlockingDeque<AnswerDTO> answerQueue = new LinkedBlockingDeque<>();

        // 获取所有的用户名和密码
        InputStream userInputStream = new FileInputStream("libs//allUser.txt");
        List<String> userString = IOUtils.readLines(userInputStream, "utf-8");
        Map<String, String> usernameAndPwd = Maps.newHashMap();
        for (String user : userString) {
            String[] strs = user.split(",");
            String userCode = strs[0];
            String pwd = strs[1].substring(6, 14);
            pwd = "Ouchn" + pwd;
            usernameAndPwd.put(userCode, pwd);
        }

       for(String subjectName:subjectList){
         //  LinkedList<AnswerRequestDTO> requestUrl = Lists.newLinkedList();
           LinkedList<String> requestUrl = Lists.newLinkedList();
           log.info("subjectName:{}",subjectName);
           InputStream quizInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-quiz.section");
           List<String> list1 = IOUtils.readLines(quizInputStream,"UTF-8");

           for (String str : list1) {
               requestUrl.add(str.split(",")[0]);
           }
           InputStream answerInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-answer.json");
           String answerStr = IOUtils.toString(answerInputStream,"UTF-8");
           List<AnswerObject> list = JSONObject.parseArray(answerStr, AnswerObject.class);
           Map<String, AnswerObject> answers = new HashMap<>();
           Map<String, AnswerObject> originAnswers = new HashMap<>();
           for (AnswerObject answerObject : list) {
               answers.put(answerObject.getQuestionCode(), answerObject);
               originAnswers.put(DealJsonString.saveZhWord(answerObject.getQuestionTitle()),answerObject);
           }

           List<String> userNames = DealInfoUtil.countUserCourseInfo("libs//userCourseInfo").get(subjectName);

           for(String username:userNames){
//               if(!Util.getVip().contains(username)){
//                   continue;
//               }
//               if(subjectName.equals("病理学与病理生理学")){
//                   continue;
//               }
               String pwd = usernameAndPwd.get(username);
               AnswerDTO answerDTO = new AnswerDTO();
               answerDTO.setSubjectName(subjectName);
               answerDTO.setUsername(username);
               answerDTO.setPwd(pwd);
               answerDTO.setAnswers(answers);
               answerDTO.setOriginAnswers(originAnswers);
               answerDTO.setCommit(true);
               answerDTO.setPush(false);
               answerDTO.setAnswerUrl(requestUrl);
               answerQueue.add(answerDTO);
           }

       }

        for (int i = 1; i <= sync; i++) {
            Thread answerThread = new DoAnswerTask(null,answerQueue);
            //log.info("加载课程ID：{} 名称：{} ", openCourseId,subjectName);
            answerThread.setName( "答题线程--" + i);
            answerThread.start();
        }


    }




}
